package com.thinkmore.business.dao;

import com.thinkmore.business.bean.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Param参数名对应xml实际的名字 默认参数名为_parameter
 * 如果参数是集合或数组，也可以直接用collection="array"或"list"
 * 如果参数是map，则parameterType="map"
 * 如果参数是对象，则parameterType="包名.User"
 */
public interface UserTestDao {
    User getById(String id);

    User getByIdWithParam(@Param("userId") String id);//userId对应xml中的参数名

    List<User> getByArrayIds(String[] ids);

    List<User> getByListIds(List<String> ids);

    List<User> getByListObj(List<User> users);

    User getByMap1(Map<String, Object> map);

    User getByMap2(Map<String, Object> map);

    User getByMap3(Map<String, Object> map);

    /**
     * 查询单个字段
     *
     * @return
     */
    int getTotalCount();

    /**
     * 查询一个表的多个字段单行数据
     *
     * @param id
     * @return
     */
    Map<String, Object> getUser(String id);

    /**
     * 查询一个表的多个字段多行数据
     *
     * @param roleId
     * @return
     */
    List<Map> getUsers(int roleId);

    /**
     * 级联属性嵌套查询，一对一
     *
     * @param id
     * @return
     */
    User getUserRoleById(String id);
    /**
     * 级联属性分段查询，一对一
     *
     * @param id
     * @return
     */
    User getUserRole2ById(String id);


    /**
     * 分页查询
     * @return
     */
    List<User> getUsersByPage(int roleId);

    int saveUser(User user);

    int updateByUser(User user);

    User getWithIfAndWhere(User user);

    User getWithTrim(User user);

    int updateByUserWithTrim(User user);

    /**
     * 使用单条sql方式
     * insert into A VALUES(...),(...)
     *
     * @param users
     * @return
     */
    int insertBatch(List<User> users);

    /**
     * 使用多条sql方式，这种方式需要jdbc连接配上allowMultiQueries=true
     * insert into A VALUES();
     * insert into A VALUES();
     *
     * @param users
     * @return 多条sql合并为一条执行，成功永远返回1
     */
    int insertBatch2(List<User> users);

    int delByIds(List<String> ids);

    int truncateUserTable();
}
